---
title: "Rust 初識與環境建置"
description: "從 JavaScript 開發者視角認識 Rust，了解 Rust 能做什麼，以及如何建置開發環境"
---

# Rust 初識與環境建置

## 🎯 學習目標

通過本模組，你將：
- 了解 Rust 能做什麼，以及它與 JavaScript 的交集
- 掌握從 JavaScript 到 Rust 的語言遷移學習法
- 學會安裝和設定 Rust 開發環境
- 建立並執行你的第一個 Rust 專案

---

## 🤔 為什麼學習 Rust？

### 作為 JavaScript 開發者，你可能會問：

- **我已經會 JavaScript 了，為什麼還要學 Rust？**
- **Rust 能幫我解決什麼問題？**
- **學習 Rust 對我的職業發展有什麼幫助？**

### Rust 能為你帶來什麼？

1.  **效能提升** - Rust 程式執行速度接近 C/C++，比 JavaScript 快 10-100 倍
2.  **記憶體安全** - 編譯時檢查，避免記憶體洩漏和空指標錯誤
3.  **並行安全** - 編譯時保證多執行緒安全，避免競爭條件
4.  **系統程式設計** - 可以編寫作業系統、驅動程式、嵌入式程式
5.  **WebAssembly** - 在瀏覽器中執行高效能程式碼
6.  **職業發展** - 掌握系統級程式語言，拓寬技術棧

### JavaScript 與 Rust 的互補關係

| 場景 | JavaScript 優勢 | Rust 優勢 |
|---|---|---|
| Web 前端 | ✅ 生態系統成熟 | ✅ WebAssembly 高效能 |
| Web 後端 | ✅ 開發效率高 | ✅ 效能和安全 |
| 桌面應用 | ✅ 跨平台簡單 | ✅ 原生效能 |
| 行動應用 | ✅ 快速原型 | ✅ 原生效能 |
| 系統程式設計 | ❌ 不適合 | ✅ 主要優勢 |
| 遊戲開發 | ✅ 有限 | ✅ 高效能 |

---

## 🧠 從 JS 到 Rust 的學習策略

### 學習心態調整

學習 Rust 時，需要調整一些思維習慣：

**JavaScript 思維：**
- 關注"做什麼" - 直接寫業務邏輯
- 執行時檢查 - 錯誤在執行時發現
- 自動記憶體管理 - 不用關心記憶體分配

**Rust 思維：**
- 關注"如何做" - 需要明確指定型別和記憶體管理
- 編譯時檢查 - 錯誤在編譯時發現
- 顯式記憶體管理 - 透過所有權系統管理記憶體

### 學習策略

1.  **對比學習** - 每個 Rust 概念都對應 JavaScript 概念
2.  **漸進式** - 從簡單語法到複雜概念
3.  **實踐驅動** - 每個概念都要動手驗證
4.  **專案導向** - 透過實際專案鞏固知識

---

## 🛠️ 安裝 Rust 開發環境

### 1. 安裝 Rust

Rust 使用 `rustup` 作為版本管理工具，類似於 Node.js 的 `nvm`：

```bash
# 安裝 Rust（類似 nvm install node）
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 或者使用 Homebrew（macOS）
brew install rust

# 驗證安裝
rustc --version
cargo --version
```

### 2. 設定 IDE

推薦使用 VS Code，安裝以下擴充套件：

- **rust-analyzer** - Rust 官方推薦的程式碼分析工具
- **Even Better TOML** - 設定檔語法高亮
- **crates** - 相依性管理
- **Error Lens** - 錯誤提示增強
- **CodeLLDB** - 偵錯支援

### 3. 設定 Cargo

Cargo 是 Rust 的套件管理器和建置工具，類似於 npm：

```bash
# 查看 Cargo 設定
cargo --version

# 設定鏡像源（中國大陸使用者）
# 在 ~/.cargo/config.toml 中新增：
[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "https://mirrors.ustc.edu.cn/crates.io-index"
```

---

## 🚀 Hello, Rust：第一個專案

### 建立新專案

```bash
# 建立新專案（類似 npm init）
cargo new hello-rust
cd hello-rust

# 專案結構
hello-rust/
├── Cargo.toml    # 專案設定（類似 package.json）
└── src/
    └── main.rs   # 入口檔案（類似 index.js）
```

### 專案設定檔對比

<UniversalEditor title="專案設定檔對比" compare={true}>
```json !! json
// package.json (JavaScript)
{
  "name": "hello-js",
  "version": "1.0.0",
  "description": "Hello JavaScript project",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js"
  },
  "dependencies": {
    "express": "^4.18.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.0"
  }
}
```

```toml !! toml
# Cargo.toml (Rust)
[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"
description = "Hello Rust project"

[dependencies]
# 生產相依性
serde = "1.0"
tokio = { version = "1.0", features = ["full"] }

[dev-dependencies]
# 開發相依性
criterion = "0.5"
```
</UniversalEditor>

### 第一個 Rust 程式

<UniversalEditor title="Hello World 對比" compare={true}>
```javascript !! js
// index.js
console.log("Hello, JavaScript!");

// 變數宣告
let name = "LangShift";
console.log(`Hello, ${name}!`);

// 函式定義
function greet(name) {
    return `Hello, ${name}!`;
}

console.log(greet("Developer"));
```

```rust !! rs
// src/main.rs
fn main() {
    println!("Hello, Rust!");
    
    // 變數宣告（不可變）
    let name = "LangShift";
    println!("Hello, {}!", name);
    
    // 函式定義
    fn greet(name: &str) -> String {
        format!("Hello, {}!", name)
    }
    
    println!("{}", greet("Developer"));
}
```
</UniversalEditor>

### 執行專案

```bash
# 執行專案（類似 npm start）
cargo run

# 建置專案（類似 npm run build）
cargo build

# 建置發布版本（最佳化後的二進位檔案）
cargo build --release

# 執行測試（類似 npm test）
cargo test

# 檢查程式碼（類似 npm run lint）
cargo clippy

# 格式化程式碼（類似 npm run format）
cargo fmt
```

---

## 🔍 理解 Rust 專案結構

### 標準專案結構

```
my-rust-project/
├── Cargo.toml          # 專案設定與相依性
├── Cargo.lock          # 相依性鎖定檔案（類似 package-lock.json）
├── src/
│   ├── main.rs         # 二進位程式入口
│   ├── lib.rs          # 函式庫入口（可選）
│   ├── bin/            # 多個二進位入口（可選）
│   │   └── another_main.rs
│   └── tests/          # 整合測試（可選）
│       └── some_test.rs
└── examples/           # 範例程式（可選）
    └── some_example.rs
```

## 📚 總結

在本模組中，我們學習了：
- Rust 的優勢及其與 JavaScript 的關係。
- 如何設定 Rust 開發環境。
- 如何使用 Cargo 建立、執行和管理 Rust 專案。
- Rust 專案的基本結構。

在下一個模組中，我們將深入探討 Rust 和 JavaScript 的語法細節比較。 